#include <iostream>
#include <cmath>
#include "Triangulo.h"

Triangulo::
Triangulo(const Triangulo& t) : Primitiva(t.GetX(),t.GetY())
{
    p1 = t.GetP(1);
    p2 = t.GetP(2);
}

const Triangulo&
Triangulo::
operator=(const Triangulo& t)
{
    if(this != &t)
    {
        this -> ~Triangulo();
        SetX(t.GetX());
        SetY(t.GetY());
        p1 = t.GetP(1);
        p2 = t.GetP(2);
    }

    return *this;
}

const Punto&
Triangulo::GetP(int n) const
{
    if(n == 1)
        return p1;
    else
        return p2;

}

void
Triangulo::SetP(int n, int x, int y)
{
    if(n == 1)
    {
        p1.SetX(x);
        p1.SetY(y);
    }
    else if(n == 2)
    {
        p2.SetX(x);
        p2.SetY(y);
    }
}

void
Triangulo::
Dibujar()
{
    cout << "Dibujo el triangulo con vértices:\n";
    Primitiva::Dibujar();
    p1.Dibujar();
    p2.Dibujar();
}

void
Triangulo::Move(int x, int y)
{
    Primitiva::Move(x, y);
    p1.Move(x, y);
    p2.Move(x, y);
}

bool
Triangulo::Redimensionar(bool aumentar)
{
    bool ok = true;
    int n = 1;

    if(!aumentar)
        n = -1;

    p1.SetX(p1.GetX()+n);
    p2.SetX(p2.GetX()-n);
    p1.SetY(p1.GetY()+n);
    p2.SetY(p2.GetY()+n);

    return ok;
}

void Triangulo::Rotar(int inc) {
    //Primer punto
    double distOrigenYPunto = sqrt(GetX()*GetX() + GetY()*GetY());
    double angOrigenYPunto = atan2(GetY(), GetX()) * 180 / PI;

    SetX(cos((angOrigenYPunto+inc)*PI/180)*distOrigenYPunto);
    SetY(sin((angOrigenYPunto+inc)*PI/180)*distOrigenYPunto);

    //Segundo punto
    distOrigenYPunto = sqrt(GetP(1).GetX()*GetP(1).GetX() + GetP(1).GetY()*GetP(1).GetY());
    angOrigenYPunto = atan2(GetP(1).GetY(), GetP(1).GetX()) * 180 / PI;

    Punto p2(cos((angOrigenYPunto+inc)*PI/180)*distOrigenYPunto, sin((angOrigenYPunto+inc)*PI/180)*distOrigenYPunto);
    SetP(1, cos((angOrigenYPunto+inc)*PI/180)*distOrigenYPunto, sin((angOrigenYPunto+inc)*PI/180)*distOrigenYPunto);

    //Tercer punto
    distOrigenYPunto = sqrt(GetP(2).GetX()*GetP(2).GetX() + GetP(2).GetY()*GetP(2).GetY());
    angOrigenYPunto = atan2(GetP(2).GetY(), GetP(2).GetX()) * 180 / PI;

    Punto p3(cos((angOrigenYPunto+inc)*PI/180)*distOrigenYPunto, sin((angOrigenYPunto+inc)*PI/180)*distOrigenYPunto);
    SetP(2, cos((angOrigenYPunto+inc)*PI/180)*distOrigenYPunto, sin((angOrigenYPunto+inc)*PI/180)*distOrigenYPunto);
}